{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 基本数据分析事例\n",
    "\n",
    "# 引入我们自己的代码\n",
    "import os\n",
    "import sys\n",
    "# 使用insert 0即只使用github，避免交叉使用了pip安装的abupy，导致的版本不一致问题\n",
    "sys.path.insert(0, os.path.abspath('../../abu/'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 获取特斯拉电动车两年的股票数据‘\n",
    "from abupy import ABuSymbolPd\n",
    "# n_folds = 2 两年\n",
    "tsla_df = ABuSymbolPd.make_kl_df('usTSLA', n_folds=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>volume</th>\n",
       "      <th>pre_close</th>\n",
       "      <th>p_change</th>\n",
       "      <th>date</th>\n",
       "      <th>date_week</th>\n",
       "      <th>atr21</th>\n",
       "      <th>atr14</th>\n",
       "      <th>key</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-12-24</th>\n",
       "      <td>313.5</td>\n",
       "      <td>314.50</td>\n",
       "      <td>295.195</td>\n",
       "      <td>295.39</td>\n",
       "      <td>5559913</td>\n",
       "      <td>319.77</td>\n",
       "      <td>-7.624</td>\n",
       "      <td>20181224</td>\n",
       "      <td>0</td>\n",
       "      <td>18.7935</td>\n",
       "      <td>19.6343</td>\n",
       "      <td>314</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-26</th>\n",
       "      <td>300.0</td>\n",
       "      <td>326.97</td>\n",
       "      <td>294.090</td>\n",
       "      <td>326.09</td>\n",
       "      <td>8163138</td>\n",
       "      <td>295.39</td>\n",
       "      <td>10.393</td>\n",
       "      <td>20181226</td>\n",
       "      <td>2</td>\n",
       "      <td>20.0741</td>\n",
       "      <td>21.4004</td>\n",
       "      <td>315</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-27</th>\n",
       "      <td>300.0</td>\n",
       "      <td>326.97</td>\n",
       "      <td>294.090</td>\n",
       "      <td>326.09</td>\n",
       "      <td>8163138</td>\n",
       "      <td>326.09</td>\n",
       "      <td>0.000</td>\n",
       "      <td>20181227</td>\n",
       "      <td>3</td>\n",
       "      <td>21.2382</td>\n",
       "      <td>22.9310</td>\n",
       "      <td>316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-28</th>\n",
       "      <td>300.0</td>\n",
       "      <td>326.97</td>\n",
       "      <td>294.090</td>\n",
       "      <td>326.09</td>\n",
       "      <td>8163138</td>\n",
       "      <td>326.09</td>\n",
       "      <td>0.000</td>\n",
       "      <td>20181228</td>\n",
       "      <td>4</td>\n",
       "      <td>22.2966</td>\n",
       "      <td>24.2575</td>\n",
       "      <td>317</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-31</th>\n",
       "      <td>300.0</td>\n",
       "      <td>326.97</td>\n",
       "      <td>294.090</td>\n",
       "      <td>326.09</td>\n",
       "      <td>8163138</td>\n",
       "      <td>326.09</td>\n",
       "      <td>0.000</td>\n",
       "      <td>20181231</td>\n",
       "      <td>0</td>\n",
       "      <td>23.2587</td>\n",
       "      <td>25.4072</td>\n",
       "      <td>318</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             open    high      low   close   volume  pre_close  p_change  \\\n",
       "2018-12-24  313.5  314.50  295.195  295.39  5559913     319.77    -7.624   \n",
       "2018-12-26  300.0  326.97  294.090  326.09  8163138     295.39    10.393   \n",
       "2018-12-27  300.0  326.97  294.090  326.09  8163138     326.09     0.000   \n",
       "2018-12-28  300.0  326.97  294.090  326.09  8163138     326.09     0.000   \n",
       "2018-12-31  300.0  326.97  294.090  326.09  8163138     326.09     0.000   \n",
       "\n",
       "                date  date_week    atr21    atr14  key  \n",
       "2018-12-24  20181224          0  18.7935  19.6343  314  \n",
       "2018-12-26  20181226          2  20.0741  21.4004  315  \n",
       "2018-12-27  20181227          3  21.2382  22.9310  316  \n",
       "2018-12-28  20181228          4  22.2966  24.2575  317  \n",
       "2018-12-31  20181231          0  23.2587  25.4072  318  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tsla_df.tail(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([<matplotlib.axes._subplots.AxesSubplot object at 0x1c2724a4a8>,\n",
       "       <matplotlib.axes._subplots.AxesSubplot object at 0x1c2709c668>],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 利用Pandas的plot()函数来展示TSLA在统计周期内的大致情况，\n",
    "tsla_df[['close', 'volume']].plot(subplots=True, style=['r','b'] ,grid=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['open', 'high', 'low', 'close', 'volume', 'pre_close', 'p_change',\n",
       "       'date', 'date_week', 'atr21', 'atr14', 'key'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tsla_df.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "DatetimeIndex: 319 entries, 2017-09-25 to 2018-12-31\n",
      "Data columns (total 12 columns):\n",
      "open         319 non-null float64\n",
      "high         319 non-null float64\n",
      "low          319 non-null float64\n",
      "close        319 non-null float64\n",
      "volume       319 non-null int64\n",
      "pre_close    319 non-null float64\n",
      "p_change     319 non-null float64\n",
      "date         319 non-null int64\n",
      "date_week    319 non-null int64\n",
      "atr21        319 non-null float64\n",
      "atr14        319 non-null float64\n",
      "key          319 non-null int64\n",
      "dtypes: float64(8), int64(4)\n",
      "memory usage: 32.4 KB\n"
     ]
    }
   ],
   "source": [
    "# DataFrame info()用于查看数据是否有缺失\n",
    "tsla_df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>volume</th>\n",
       "      <th>pre_close</th>\n",
       "      <th>p_change</th>\n",
       "      <th>date</th>\n",
       "      <th>date_week</th>\n",
       "      <th>atr21</th>\n",
       "      <th>atr14</th>\n",
       "      <th>key</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>319.0000</td>\n",
       "      <td>319.0000</td>\n",
       "      <td>319.0000</td>\n",
       "      <td>319.0000</td>\n",
       "      <td>3.1900e+02</td>\n",
       "      <td>319.0000</td>\n",
       "      <td>319.0000</td>\n",
       "      <td>3.1900e+02</td>\n",
       "      <td>319.0000</td>\n",
       "      <td>319.0000</td>\n",
       "      <td>319.0000</td>\n",
       "      <td>319.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>319.1984</td>\n",
       "      <td>325.2589</td>\n",
       "      <td>313.0172</td>\n",
       "      <td>319.4295</td>\n",
       "      <td>7.2390e+06</td>\n",
       "      <td>319.5079</td>\n",
       "      <td>0.0329</td>\n",
       "      <td>2.0179e+07</td>\n",
       "      <td>2.0219</td>\n",
       "      <td>15.9570</td>\n",
       "      <td>16.0470</td>\n",
       "      <td>159.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>27.2803</td>\n",
       "      <td>27.1975</td>\n",
       "      <td>27.4277</td>\n",
       "      <td>27.1430</td>\n",
       "      <td>5.1388e+06</td>\n",
       "      <td>27.1984</td>\n",
       "      <td>3.3783</td>\n",
       "      <td>3.9365e+03</td>\n",
       "      <td>1.4107</td>\n",
       "      <td>4.0336</td>\n",
       "      <td>4.5283</td>\n",
       "      <td>92.2316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>252.7800</td>\n",
       "      <td>260.3300</td>\n",
       "      <td>244.5900</td>\n",
       "      <td>250.5600</td>\n",
       "      <td>2.4366e+04</td>\n",
       "      <td>250.5600</td>\n",
       "      <td>-13.9020</td>\n",
       "      <td>2.0171e+07</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>9.3285</td>\n",
       "      <td>8.9822</td>\n",
       "      <td>0.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>300.1250</td>\n",
       "      <td>306.1150</td>\n",
       "      <td>294.0900</td>\n",
       "      <td>301.0050</td>\n",
       "      <td>4.6623e+06</td>\n",
       "      <td>301.0050</td>\n",
       "      <td>-1.8565</td>\n",
       "      <td>2.0180e+07</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>12.2825</td>\n",
       "      <td>12.3367</td>\n",
       "      <td>79.5000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>318.4100</td>\n",
       "      <td>324.7400</td>\n",
       "      <td>312.7700</td>\n",
       "      <td>320.1000</td>\n",
       "      <td>6.2215e+06</td>\n",
       "      <td>320.1000</td>\n",
       "      <td>-0.0080</td>\n",
       "      <td>2.0181e+07</td>\n",
       "      <td>2.0000</td>\n",
       "      <td>15.7378</td>\n",
       "      <td>15.4076</td>\n",
       "      <td>159.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>342.5650</td>\n",
       "      <td>348.2800</td>\n",
       "      <td>336.2050</td>\n",
       "      <td>342.3850</td>\n",
       "      <td>8.4146e+06</td>\n",
       "      <td>342.7800</td>\n",
       "      <td>1.5340</td>\n",
       "      <td>2.0181e+07</td>\n",
       "      <td>3.0000</td>\n",
       "      <td>18.5202</td>\n",
       "      <td>18.5339</td>\n",
       "      <td>238.5000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>375.0000</td>\n",
       "      <td>387.4600</td>\n",
       "      <td>367.1200</td>\n",
       "      <td>379.5700</td>\n",
       "      <td>3.3650e+07</td>\n",
       "      <td>379.5700</td>\n",
       "      <td>17.3470</td>\n",
       "      <td>2.0181e+07</td>\n",
       "      <td>4.0000</td>\n",
       "      <td>26.3279</td>\n",
       "      <td>29.0655</td>\n",
       "      <td>318.0000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           open      high       low     close      volume  pre_close  \\\n",
       "count  319.0000  319.0000  319.0000  319.0000  3.1900e+02   319.0000   \n",
       "mean   319.1984  325.2589  313.0172  319.4295  7.2390e+06   319.5079   \n",
       "std     27.2803   27.1975   27.4277   27.1430  5.1388e+06    27.1984   \n",
       "min    252.7800  260.3300  244.5900  250.5600  2.4366e+04   250.5600   \n",
       "25%    300.1250  306.1150  294.0900  301.0050  4.6623e+06   301.0050   \n",
       "50%    318.4100  324.7400  312.7700  320.1000  6.2215e+06   320.1000   \n",
       "75%    342.5650  348.2800  336.2050  342.3850  8.4146e+06   342.7800   \n",
       "max    375.0000  387.4600  367.1200  379.5700  3.3650e+07   379.5700   \n",
       "\n",
       "       p_change        date  date_week     atr21     atr14       key  \n",
       "count  319.0000  3.1900e+02   319.0000  319.0000  319.0000  319.0000  \n",
       "mean     0.0329  2.0179e+07     2.0219   15.9570   16.0470  159.0000  \n",
       "std      3.3783  3.9365e+03     1.4107    4.0336    4.5283   92.2316  \n",
       "min    -13.9020  2.0171e+07     0.0000    9.3285    8.9822    0.0000  \n",
       "25%     -1.8565  2.0180e+07     1.0000   12.2825   12.3367   79.5000  \n",
       "50%     -0.0080  2.0181e+07     2.0000   15.7378   15.4076  159.0000  \n",
       "75%      1.5340  2.0181e+07     3.0000   18.5202   18.5339  238.5000  \n",
       "max     17.3470  2.0181e+07     4.0000   26.3279   29.0655  318.0000  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# DataFrame describe()  分别展示统计信息\n",
    "tsla_df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2017-12-01    305.44\n",
       "2017-12-04    306.50\n",
       "2017-12-05    302.00\n",
       "2017-12-06    300.10\n",
       "2017-12-07    312.00\n",
       "               ...  \n",
       "2018-01-25    348.27\n",
       "2018-01-26    341.50\n",
       "2018-01-29    339.85\n",
       "2018-01-30    345.14\n",
       "2018-01-31    347.51\n",
       "Name: open, Length: 41, dtype: float64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 索引选取和切片选择\n",
    "# 使用loc 配合行名称，列名称选取, 不传列名称 默认所有的列\n",
    "#  2017。12-2018.1 所有的开盘价格\n",
    "tsla_df.loc['2017-12-01':'2018-01-31', 'open']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>low</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2017-09-26</th>\n",
       "      <td>341.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-09-27</th>\n",
       "      <td>340.50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-09-28</th>\n",
       "      <td>335.41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-09-29</th>\n",
       "      <td>339.04</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               low\n",
       "2017-09-26  341.01\n",
       "2017-09-27  340.50\n",
       "2017-09-28  335.41\n",
       "2017-09-29  339.04"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# iloc 配合行索引数值和列索引数值选取切片\n",
    "tsla_df.iloc[1:5, 2:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>low</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2017-09-25</th>\n",
       "      <td>342.880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-09-26</th>\n",
       "      <td>341.010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-09-27</th>\n",
       "      <td>340.500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-09-28</th>\n",
       "      <td>335.410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-09-29</th>\n",
       "      <td>339.040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-10-02</th>\n",
       "      <td>335.530</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-10-03</th>\n",
       "      <td>331.500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-10-04</th>\n",
       "      <td>349.610</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-10-05</th>\n",
       "      <td>351.560</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-10-06</th>\n",
       "      <td>352.510</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-17</th>\n",
       "      <td>343.880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-18</th>\n",
       "      <td>333.690</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-19</th>\n",
       "      <td>329.740</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-20</th>\n",
       "      <td>311.869</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-21</th>\n",
       "      <td>312.440</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-24</th>\n",
       "      <td>295.195</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-26</th>\n",
       "      <td>294.090</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-27</th>\n",
       "      <td>294.090</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-28</th>\n",
       "      <td>294.090</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-31</th>\n",
       "      <td>294.090</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>319 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                low\n",
       "2017-09-25  342.880\n",
       "2017-09-26  341.010\n",
       "2017-09-27  340.500\n",
       "2017-09-28  335.410\n",
       "2017-09-29  339.040\n",
       "...             ...\n",
       "2018-12-24  295.195\n",
       "2018-12-26  294.090\n",
       "2018-12-27  294.090\n",
       "2018-12-28  294.090\n",
       "2018-12-31  294.090\n",
       "\n",
       "[319 rows x 1 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 所有的行\n",
    "tsla_df.iloc[:, 2:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>volume</th>\n",
       "      <th>pre_close</th>\n",
       "      <th>p_change</th>\n",
       "      <th>date</th>\n",
       "      <th>date_week</th>\n",
       "      <th>atr21</th>\n",
       "      <th>atr14</th>\n",
       "      <th>key</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2017-09-27</th>\n",
       "      <td>348.78</td>\n",
       "      <td>351.22</td>\n",
       "      <td>340.5</td>\n",
       "      <td>340.98</td>\n",
       "      <td>244497</td>\n",
       "      <td>345.2</td>\n",
       "      <td>-1.222</td>\n",
       "      <td>20170927</td>\n",
       "      <td>2</td>\n",
       "      <td>11.7097</td>\n",
       "      <td>11.6516</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              open    high    low   close  volume  pre_close  p_change  \\\n",
       "2017-09-27  348.78  351.22  340.5  340.98  244497      345.2    -1.222   \n",
       "\n",
       "                date  date_week    atr21    atr14  key  \n",
       "2017-09-27  20170927          2  11.7097  11.6516    2  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 所有的列\n",
    "tsla_df.iloc[2:3,:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>close</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2017-09-26</th>\n",
       "      <td>345.20</td>\n",
       "      <td>350.89</td>\n",
       "      <td>351.19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017-09-27</th>\n",
       "      <td>340.98</td>\n",
       "      <td>348.78</td>\n",
       "      <td>351.22</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             close    open    high\n",
       "2017-09-26  345.20  350.89  351.19\n",
       "2017-09-27  340.98  348.78  351.22"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 指定列后获取对应的行 混合模式\n",
    "tsla_df[['close','open','high']][1:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>volume</th>\n",
       "      <th>pre_close</th>\n",
       "      <th>p_change</th>\n",
       "      <th>date</th>\n",
       "      <th>date_week</th>\n",
       "      <th>atr21</th>\n",
       "      <th>atr14</th>\n",
       "      <th>key</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-02-08</th>\n",
       "      <td>343.31</td>\n",
       "      <td>348.62</td>\n",
       "      <td>314.600</td>\n",
       "      <td>315.23</td>\n",
       "      <td>10314573</td>\n",
       "      <td>345.00</td>\n",
       "      <td>-8.629</td>\n",
       "      <td>20180208</td>\n",
       "      <td>3</td>\n",
       "      <td>14.8257</td>\n",
       "      <td>16.1369</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-27</th>\n",
       "      <td>304.00</td>\n",
       "      <td>304.27</td>\n",
       "      <td>277.180</td>\n",
       "      <td>279.18</td>\n",
       "      <td>13872029</td>\n",
       "      <td>304.18</td>\n",
       "      <td>-8.219</td>\n",
       "      <td>20180327</td>\n",
       "      <td>1</td>\n",
       "      <td>15.8350</td>\n",
       "      <td>16.5426</td>\n",
       "      <td>126</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-06</th>\n",
       "      <td>300.50</td>\n",
       "      <td>322.17</td>\n",
       "      <td>297.480</td>\n",
       "      <td>319.50</td>\n",
       "      <td>18767269</td>\n",
       "      <td>291.09</td>\n",
       "      <td>9.760</td>\n",
       "      <td>20180606</td>\n",
       "      <td>2</td>\n",
       "      <td>12.6635</td>\n",
       "      <td>12.8366</td>\n",
       "      <td>175</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-08-02</th>\n",
       "      <td>328.44</td>\n",
       "      <td>349.99</td>\n",
       "      <td>323.160</td>\n",
       "      <td>349.54</td>\n",
       "      <td>23214962</td>\n",
       "      <td>300.84</td>\n",
       "      <td>16.188</td>\n",
       "      <td>20180802</td>\n",
       "      <td>3</td>\n",
       "      <td>18.9957</td>\n",
       "      <td>20.0467</td>\n",
       "      <td>215</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-08-07</th>\n",
       "      <td>343.84</td>\n",
       "      <td>387.46</td>\n",
       "      <td>339.150</td>\n",
       "      <td>379.57</td>\n",
       "      <td>30875768</td>\n",
       "      <td>341.99</td>\n",
       "      <td>10.989</td>\n",
       "      <td>20180807</td>\n",
       "      <td>1</td>\n",
       "      <td>23.8203</td>\n",
       "      <td>26.4358</td>\n",
       "      <td>218</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-08-17</th>\n",
       "      <td>323.50</td>\n",
       "      <td>326.77</td>\n",
       "      <td>303.530</td>\n",
       "      <td>305.50</td>\n",
       "      <td>18958612</td>\n",
       "      <td>335.45</td>\n",
       "      <td>-8.928</td>\n",
       "      <td>20180817</td>\n",
       "      <td>4</td>\n",
       "      <td>23.9873</td>\n",
       "      <td>24.7350</td>\n",
       "      <td>226</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-09-10</th>\n",
       "      <td>273.26</td>\n",
       "      <td>286.03</td>\n",
       "      <td>271.000</td>\n",
       "      <td>285.50</td>\n",
       "      <td>14283528</td>\n",
       "      <td>263.24</td>\n",
       "      <td>8.456</td>\n",
       "      <td>20180910</td>\n",
       "      <td>0</td>\n",
       "      <td>18.3846</td>\n",
       "      <td>17.6921</td>\n",
       "      <td>241</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-09-28</th>\n",
       "      <td>270.26</td>\n",
       "      <td>278.00</td>\n",
       "      <td>260.555</td>\n",
       "      <td>264.77</td>\n",
       "      <td>33649694</td>\n",
       "      <td>307.52</td>\n",
       "      <td>-13.902</td>\n",
       "      <td>20180928</td>\n",
       "      <td>4</td>\n",
       "      <td>18.3528</td>\n",
       "      <td>18.9696</td>\n",
       "      <td>255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-10-01</th>\n",
       "      <td>305.77</td>\n",
       "      <td>311.44</td>\n",
       "      <td>301.050</td>\n",
       "      <td>310.70</td>\n",
       "      <td>21777597</td>\n",
       "      <td>264.77</td>\n",
       "      <td>17.347</td>\n",
       "      <td>20181001</td>\n",
       "      <td>0</td>\n",
       "      <td>17.6289</td>\n",
       "      <td>17.8257</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-10-23</th>\n",
       "      <td>263.87</td>\n",
       "      <td>297.93</td>\n",
       "      <td>262.100</td>\n",
       "      <td>294.14</td>\n",
       "      <td>19027753</td>\n",
       "      <td>260.95</td>\n",
       "      <td>12.719</td>\n",
       "      <td>20181023</td>\n",
       "      <td>1</td>\n",
       "      <td>19.9842</td>\n",
       "      <td>20.2259</td>\n",
       "      <td>272</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-26</th>\n",
       "      <td>300.00</td>\n",
       "      <td>326.97</td>\n",
       "      <td>294.090</td>\n",
       "      <td>326.09</td>\n",
       "      <td>8163138</td>\n",
       "      <td>295.39</td>\n",
       "      <td>10.393</td>\n",
       "      <td>20181226</td>\n",
       "      <td>2</td>\n",
       "      <td>20.0741</td>\n",
       "      <td>21.4004</td>\n",
       "      <td>315</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              open    high      low   close    volume  pre_close  p_change  \\\n",
       "2018-02-08  343.31  348.62  314.600  315.23  10314573     345.00    -8.629   \n",
       "2018-03-27  304.00  304.27  277.180  279.18  13872029     304.18    -8.219   \n",
       "2018-06-06  300.50  322.17  297.480  319.50  18767269     291.09     9.760   \n",
       "2018-08-02  328.44  349.99  323.160  349.54  23214962     300.84    16.188   \n",
       "2018-08-07  343.84  387.46  339.150  379.57  30875768     341.99    10.989   \n",
       "2018-08-17  323.50  326.77  303.530  305.50  18958612     335.45    -8.928   \n",
       "2018-09-10  273.26  286.03  271.000  285.50  14283528     263.24     8.456   \n",
       "2018-09-28  270.26  278.00  260.555  264.77  33649694     307.52   -13.902   \n",
       "2018-10-01  305.77  311.44  301.050  310.70  21777597     264.77    17.347   \n",
       "2018-10-23  263.87  297.93  262.100  294.14  19027753     260.95    12.719   \n",
       "2018-12-26  300.00  326.97  294.090  326.09   8163138     295.39    10.393   \n",
       "\n",
       "                date  date_week    atr21    atr14  key  \n",
       "2018-02-08  20180208          3  14.8257  16.1369   94  \n",
       "2018-03-27  20180327          1  15.8350  16.5426  126  \n",
       "2018-06-06  20180606          2  12.6635  12.8366  175  \n",
       "2018-08-02  20180802          3  18.9957  20.0467  215  \n",
       "2018-08-07  20180807          1  23.8203  26.4358  218  \n",
       "2018-08-17  20180817          4  23.9873  24.7350  226  \n",
       "2018-09-10  20180910          0  18.3846  17.6921  241  \n",
       "2018-09-28  20180928          4  18.3528  18.9696  255  \n",
       "2018-10-01  20181001          0  17.6289  17.8257  256  \n",
       "2018-10-23  20181023          1  19.9842  20.2259  272  \n",
       "2018-12-26  20181226          2  20.0741  21.4004  315  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 逻辑条件筛选\n",
    "# 筛选涨跌幅大于8%的交易日数据\n",
    "# 多重筛选条件，使用 | & 使用（）将每一个条件扩起来\n",
    "import numpy as np\n",
    "tsla_df[np.abs(tsla_df.p_change)>8]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/sundong/anaconda3/envs/learn/lib/python3.6/site-packages/ipykernel_launcher.py:3: FutureWarning: by argument to sort_index is deprecated, please use .sort_values(by=...)\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>volume</th>\n",
       "      <th>pre_close</th>\n",
       "      <th>p_change</th>\n",
       "      <th>date</th>\n",
       "      <th>date_week</th>\n",
       "      <th>atr21</th>\n",
       "      <th>atr14</th>\n",
       "      <th>key</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-09-28</th>\n",
       "      <td>270.26</td>\n",
       "      <td>278.00</td>\n",
       "      <td>260.555</td>\n",
       "      <td>264.77</td>\n",
       "      <td>33649694</td>\n",
       "      <td>307.52</td>\n",
       "      <td>-13.902</td>\n",
       "      <td>20180928</td>\n",
       "      <td>4</td>\n",
       "      <td>18.3528</td>\n",
       "      <td>18.9696</td>\n",
       "      <td>255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-08-17</th>\n",
       "      <td>323.50</td>\n",
       "      <td>326.77</td>\n",
       "      <td>303.530</td>\n",
       "      <td>305.50</td>\n",
       "      <td>18958612</td>\n",
       "      <td>335.45</td>\n",
       "      <td>-8.928</td>\n",
       "      <td>20180817</td>\n",
       "      <td>4</td>\n",
       "      <td>23.9873</td>\n",
       "      <td>24.7350</td>\n",
       "      <td>226</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-02-08</th>\n",
       "      <td>343.31</td>\n",
       "      <td>348.62</td>\n",
       "      <td>314.600</td>\n",
       "      <td>315.23</td>\n",
       "      <td>10314573</td>\n",
       "      <td>345.00</td>\n",
       "      <td>-8.629</td>\n",
       "      <td>20180208</td>\n",
       "      <td>3</td>\n",
       "      <td>14.8257</td>\n",
       "      <td>16.1369</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-27</th>\n",
       "      <td>304.00</td>\n",
       "      <td>304.27</td>\n",
       "      <td>277.180</td>\n",
       "      <td>279.18</td>\n",
       "      <td>13872029</td>\n",
       "      <td>304.18</td>\n",
       "      <td>-8.219</td>\n",
       "      <td>20180327</td>\n",
       "      <td>1</td>\n",
       "      <td>15.8350</td>\n",
       "      <td>16.5426</td>\n",
       "      <td>126</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-28</th>\n",
       "      <td>264.58</td>\n",
       "      <td>268.68</td>\n",
       "      <td>252.100</td>\n",
       "      <td>257.78</td>\n",
       "      <td>21001437</td>\n",
       "      <td>279.18</td>\n",
       "      <td>-7.665</td>\n",
       "      <td>20180328</td>\n",
       "      <td>2</td>\n",
       "      <td>19.1300</td>\n",
       "      <td>21.2809</td>\n",
       "      <td>127</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              open    high      low   close    volume  pre_close  p_change  \\\n",
       "2018-09-28  270.26  278.00  260.555  264.77  33649694     307.52   -13.902   \n",
       "2018-08-17  323.50  326.77  303.530  305.50  18958612     335.45    -8.928   \n",
       "2018-02-08  343.31  348.62  314.600  315.23  10314573     345.00    -8.629   \n",
       "2018-03-27  304.00  304.27  277.180  279.18  13872029     304.18    -8.219   \n",
       "2018-03-28  264.58  268.68  252.100  257.78  21001437     279.18    -7.665   \n",
       "\n",
       "                date  date_week    atr21    atr14  key  \n",
       "2018-09-28  20180928          4  18.3528  18.9696  255  \n",
       "2018-08-17  20180817          4  23.9873  24.7350  226  \n",
       "2018-02-08  20180208          3  14.8257  16.1369   94  \n",
       "2018-03-27  20180327          1  15.8350  16.5426  126  \n",
       "2018-03-28  20180328          2  19.1300  21.2809  127  "
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 数据序列值排序 \n",
    "# 对涨跌幅进行排序，打印出跌幅最大的5个值\n",
    "tsla_df.sort_index(by='p_change')[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 如果一行的数据中有na那就删除这一行\n",
    "tsla_df.dropna()\n",
    "# 通过how进行控制,如果一行的数据全部都是na 那就删除这一行\n",
    "tsla_df.dropna(how='all')\n",
    "# 使用指定值填充na , inplace 代表就地操作，即不返回新的序列在原序列上进行操作\n",
    "tsla_df.fillna(tsla_df.mean(), inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2017-09-25    344.99\n",
       "2017-09-26    345.20\n",
       "2017-09-27    340.98\n",
       "Name: close, dtype: float64"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# pct_change()函数对序列从第二项开始，前向做减法再除以前一项，这个操作在股票量化中\n",
    "# 使用频繁，因为pct_change()针对价格序列的操作结果即是涨跌幅序列\n",
    "tsla_df.close[:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 针对价格做pct_change()后即为涨跌幅\n",
    "change_radio = tsla_df.close.pct_change()[:20]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2017-10-16   -1.37\n",
       "2017-10-17    1.49\n",
       "2017-10-18    1.08\n",
       "2017-10-19   -2.17\n",
       "2017-10-20   -1.92\n",
       "Name: close, dtype: float64"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# round 保留几位小数\n",
    "np.round(change_radio[-5:]*100, 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "# I/O操作API支持的格式CSV, SQL, XLS, JSON, HDF5\n",
    "# 量化领域使用CSV 和 HDF5\n",
    "# abu量化系统中数据本地缓存用的hdf5\n",
    "\n",
    "# 写入CSV\n",
    "tsla_df.to_csv('./tsla_2.csv',columns=tsla_df.columns, index=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>volume</th>\n",
       "      <th>pre_close</th>\n",
       "      <th>p_change</th>\n",
       "      <th>date</th>\n",
       "      <th>date_week</th>\n",
       "      <th>atr21</th>\n",
       "      <th>atr14</th>\n",
       "      <th>key</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-12-24</th>\n",
       "      <td>313.5</td>\n",
       "      <td>314.50</td>\n",
       "      <td>295.195</td>\n",
       "      <td>295.39</td>\n",
       "      <td>5559913</td>\n",
       "      <td>319.77</td>\n",
       "      <td>-7.624</td>\n",
       "      <td>20181224</td>\n",
       "      <td>0</td>\n",
       "      <td>18.7935</td>\n",
       "      <td>19.6343</td>\n",
       "      <td>314</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-26</th>\n",
       "      <td>300.0</td>\n",
       "      <td>326.97</td>\n",
       "      <td>294.090</td>\n",
       "      <td>326.09</td>\n",
       "      <td>8163138</td>\n",
       "      <td>295.39</td>\n",
       "      <td>10.393</td>\n",
       "      <td>20181226</td>\n",
       "      <td>2</td>\n",
       "      <td>20.0741</td>\n",
       "      <td>21.4004</td>\n",
       "      <td>315</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-27</th>\n",
       "      <td>300.0</td>\n",
       "      <td>326.97</td>\n",
       "      <td>294.090</td>\n",
       "      <td>326.09</td>\n",
       "      <td>8163138</td>\n",
       "      <td>326.09</td>\n",
       "      <td>0.000</td>\n",
       "      <td>20181227</td>\n",
       "      <td>3</td>\n",
       "      <td>21.2382</td>\n",
       "      <td>22.9310</td>\n",
       "      <td>316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-28</th>\n",
       "      <td>300.0</td>\n",
       "      <td>326.97</td>\n",
       "      <td>294.090</td>\n",
       "      <td>326.09</td>\n",
       "      <td>8163138</td>\n",
       "      <td>326.09</td>\n",
       "      <td>0.000</td>\n",
       "      <td>20181228</td>\n",
       "      <td>4</td>\n",
       "      <td>22.2966</td>\n",
       "      <td>24.2575</td>\n",
       "      <td>317</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-12-31</th>\n",
       "      <td>300.0</td>\n",
       "      <td>326.97</td>\n",
       "      <td>294.090</td>\n",
       "      <td>326.09</td>\n",
       "      <td>8163138</td>\n",
       "      <td>326.09</td>\n",
       "      <td>0.000</td>\n",
       "      <td>20181231</td>\n",
       "      <td>0</td>\n",
       "      <td>23.2587</td>\n",
       "      <td>25.4072</td>\n",
       "      <td>318</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             open    high      low   close   volume  pre_close  p_change  \\\n",
       "2018-12-24  313.5  314.50  295.195  295.39  5559913     319.77    -7.624   \n",
       "2018-12-26  300.0  326.97  294.090  326.09  8163138     295.39    10.393   \n",
       "2018-12-27  300.0  326.97  294.090  326.09  8163138     326.09     0.000   \n",
       "2018-12-28  300.0  326.97  294.090  326.09  8163138     326.09     0.000   \n",
       "2018-12-31  300.0  326.97  294.090  326.09  8163138     326.09     0.000   \n",
       "\n",
       "                date  date_week    atr21    atr14  key  \n",
       "2018-12-24  20181224          0  18.7935  19.6343  314  \n",
       "2018-12-26  20181226          2  20.0741  21.4004  315  \n",
       "2018-12-27  20181227          3  21.2382  22.9310  316  \n",
       "2018-12-28  20181228          4  22.2966  24.2575  317  \n",
       "2018-12-31  20181231          0  23.2587  25.4072  318  "
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#  读取CSV \n",
    "import pandas as pd\n",
    "tsla_df_load = pd.read_csv('./tsla_2.csv', parse_dates=True, index_col=0)\n",
    "tsla_df_load.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
